package string;

public class LiLun {
    /*
    字符串
        String
            String是不可变对象
                java.lang.String使用了final修饰，不能被继承；
                字符串底层封装了字符数组及针对字符数组的操作算法；
                字符串一旦创建，对象内容不可改变，连接字符串会创建新对象；
                Java字符串在内存中采用Unicode编码方式，任何一个字符对应两个字节的定长编码
            String常量池
                Java为了提高性能，直接量字符串创建后会缓存在字符串常量池中
                对于重复出现的字符串直接量，JVM会首先在常量池中查找，如果存在即返回该对象来重用字符串对象。
     */

    /*
    常用方法
        内存编码及长度
            String在内存中采用Unicode编码，每个字符占用两个字节
            任何一个字符（无论中文还是英文）都算1个字符长度。
            length()方法用于获取字符长度
            int length();      返回房钱字符串的长度（字符个数）
     */

    /*
        使用indexOf实现检索
            indexOf方法用于实现在字符串中检索另外一个字符串
            String提供几个重载的indexOf方法
                int indexOf(String str)     在字符串中检索str，返回其第一次出现的位置，如果找不到则返回-1
                in indexOf(String str,int fromIndex)    从字符串的fromIndex位置开始检索
            String还定义lastIndexOf方法：
                int lastIndexOf(String str)     str在字符串中多次出现时，将返回最后一个出现的位置
     */

    /*
    使用substring获取字符串
        substring方法用于返回一个字符串的子字符串。
        substring常用重载方法，定义如下：
            String substring(int beginIndex,int endIndex)
                返回字符串中从下标beginIndex（包括）开始到endIndex（不包括）结束的子字符串
            String substring(int beginIndex）
                返回字符串中从下标beginIndex（包括）开始到字符串结尾的子字符串
     */

    /*
    去除两侧空白
        String trim()
        方法用于去掉一个字符串的前导和后继字符。
     */

    /*
    获取指定位置字符
        String中定义有charAt()方法：
            char charAt(int index)  用于返回字符串制定位置的字符。参数index表示指定的位置
     */

    /*
    检测字符串的开始与结尾
        用于检测一个字符串是否以制定字符串开头或结尾
            boolean startWith(String str)   判断当前字符串是否是以参数str开始
            boolean endsWith(String str)   判断当前字符串是否是以参数str结尾
     */

    /*
    大小写变换
        转换字符串中英文字母的大小写形式
            String toUpperCase()    将当前字符串中的英文转换为全大写
            String toLowerCase()    将当前字符串中的英文转换为全小写
     */

    /*
    valueOf
        String提供了若干的静态的重载方法valueOd
        该方法用于将其他类型转换为字符串类型
     */

    /*
    正则表达式
        正则表达式是一串特定字符，组成一个“规则的字符串”
            这个“规则字符串”是描述文本规则的工具
            正则表达式就是记录文字规则的代码
            通过正则表达式能对字符串数据进行一些复杂匹配、查找、替换等操作
        正则字符：
            [abc]：a、b、c中的任意一个字符
            [^abc]：除了a、b、c之外的任意字符
            [a-z]：a到z之间的任意字符
            [a-z]：a到z之间的任意字符
            [a-zA-Z0-9]：a~z、A~Z、0~9之间的任意字符
            [a-z&&[^bc]]：a~z中除了b和c以外的任意一个字符，其中&&表示“与”的关系

         预定义字符集
            .：任意一个字符
            \d：任意一个数字字符，相当于[0-9]
            \w：单词字符，相当于[a-zA-Z0-9_]
            \s：空白字符，相当于[\t\n\r\f]
            \D：非数字字符
            \W：非单词字符
            \S：非空白字符

         数量词
            X?：表示0个或1个X
            X*：表示0个或任意多个X
            X+：表示1个或任意多个X（大于等于1个X）
            X{n}：表示n个X
            X{n,}：表示n个到任意多个X（大于等于n个X）
            X{n,m}：表示n个到m个X（n<=m）

        分组“()”
            分组：()圆括号表示分组，可以将一些列正则表达式看做一个整体，分组时可以使用“|”表示“或”关系。
                例如：匹配网址后缀：
                    (com|cn)
                    上述例子中，圆括号表示这里需要出现“com”或者“cn”

        “^”和“$”
            边界匹配
                ^代表字符串开始
                $代表字符串结束
                例如：
                    匹配用户名规则-从头到尾连续8~10个单词字符
                        \w{8,10}
                        ^\w{8,10}$
                        如果使用第一种写法，则“abcd1234_abcd”是可以验证通过的
                        使用第二种写法由于有从头到尾整体的限定，则验证不能通过
     */

    /*
    matches方法
        用来讲一个字符串与正则表达式进行匹配
        如果成功返回true,否则返回false
            boolean matches(String regex)
                参数regex为正则表达式，验证当前字符串是否符合格式要求，负责返回true，否则返回false
     */

    /*
    split方法
        可以将字符串按照特定的分隔符拆分成字符串数组
            String[] split(String regex)
                参数regex为正则表达式，以regex所表示的字符串为分隔符，将字符串拆分成字符串数组
     */

    /*
    replaceAll方法
        String提供了用于字符串替换的方法
            String replaceAll(String regex,String replacement)
                将字符串中匹配正则表达式regex的字符串替换成replacement
     */
}













